package lt2786

import "math"

func maxScore(nums []int, x int) int64 {
	res := int64(nums[0])
	// dp[i]: 移动到位置i可以获取的最大分时
	// 1. 最后移动的元素为偶数时的最大分数
	// 2. 最后移动的元素为奇数时的最大分数
	dp := [2]int64{math.MinInt32, math.MinInt32}
	dp[nums[0] %2] = int64(nums[0])
	for i:=1;i<len(nums);i++ {
		parity := nums[i] % 2 // 奇偶性
		cur := max(dp[parity] + int64(nums[i]), dp[1-parity] - int64(x) + int64(nums[i]))
		res = max(res, cur)
		dp[parity] = max(dp[parity], cur)
	}
	return res
}